<?php

/**
 * Bild Hochladen
 *
 * Die Funktion läd ein Übergebenes bild in die Datenbank und gibt 
 * die Bild ID zurück.
 *
 * @param array $file		Datei Array wie es in $_FILES liegt.
 * @param string $file['tmp_name'] Dateiname
 * @return int			Gibt die ID des eintrags zurück, im Fehlerfall IMAGE_NA_ID
 */
function add_image($file) {
    $func_name = 'add_image()';
    log_message('[' . $func_name . ']' . LOG_PING);
    if ($file['size'] > 0) {
        // Datenbank Verbindung aufbauen		
        $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
        if (mysqli_connect_errno()) {
            log_error('[' . $func_name . ']' . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
        }

        $handle = fopen($file['tmp_name'], "r");
        $img_data = addslashes(fread($handle, filesize($file['tmp_name'])));
        unset($handle);
        $sql = "INSERT INTO images
                                    (img_data,img_type) 
                            VALUES
                                    ('" . $img_data . "','" . $file["type"] . "')";
        unset($img_data);
        $result = $db->query($sql);
        unset($sql);
        if (!$result) {
            log_error('[ADD_IMAGE] Etwas stimmte mit dem Query nicht: ' . $db->error);
        }
        //if (DEBUG_ENABLED) var_dump($result);
        unset($handle);
        if ($result == false) {
            unset($result);
            return 0;
        } else {
            unset($result);
            return $db->insert_id;
            
        }
    } else {
        return IMAGE_NA_ID;
    }
}

/**
 * Bild Cache Löschen
 *
 * Die Funktion läd löscht einen Angegebenen Bild Cache.
 *
 * @param string $path		Datei Pfad
 * @return bool			Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. 
 */
function del_image_cache($path) {
    return unlink($path);
}

/**
 * @name chop_image()
 * 
 * 
 *
 * @param   int     $img_id   Quell Bild ID
 * @param   int     $x        Auswahl X Koordinate
 * @param   int     $y        Auswall Y Koordinate
 * @param   int     $width    Auswahl Breite
 * @param   int     $heigh    Aiswahl Hoehe
 * @return  int               Ziel Bild ID 
 */
function chop_image($img_id, $x, $y, $width, $heigh) {
        $func_name = 'chop_image()';
    log_message('[' . $func_name . ']' . LOG_PING);
    
    if (!is_numeric($img_id)) {
        log_message('[' . $func_name . '] ' . '$img_id ' . ERROR_NOT_NUMERIC . $img_id);
        $img_id = 0;
    }
    del_image_cache(get_image($img_id));
    $src_img = imagecreatefromjpeg(get_image($img_id));
    $dst_img = ImageCreateTrueColor(IMAGE_DEFAULT_W, IMAGE_DEFAULT_H);

    imagecopyresampled($dst_img, $src_img, 0, 0, $x, $y, IMAGE_DEFAULT_W, IMAGE_DEFAULT_H, $width, $heigh);

    $tmp_img_path = IMAGE_CACHEDIR . "image_" . IMAGE_TMP . "." . IMAGE_DEFAULT_TYPE;

    if (imagejpeg($dst_img, $tmp_img_path, IMAGE_DEFAULT_QUALI) == true) {
        $tmp_file['size'] = 1;
        $tmp_file['type'] = 'image/' . IMAGE_DEFAULT_TYPE;
        $tmp_file['tmp_name'] = $tmp_img_path;
        $new_img_id = add_image($tmp_file);
        del_image_cache($tmp_img_path);
        get_image($new_img_id);
        return $new_img_id;
    } else {
        return IMAGE_NA_ID;
    }
}

/**
 * Bild Daten ausgeben
 *
 * Die Funktion sucht ein Bild-Adresse zu einer übergebenen ID. Ist das 
 * Bild in der Datenbank vorhanden jedoch noch nicht im Cache wird es 
 * angelegt.
 * Ist das Bild nicht in der Datenbank vorhanden, wird die Adresse zur
 * IMAGE_NA Grafik zurück gegeben.
 *
 * @param   int     $img_id   Bild ID
 * @return  string            Bildes Daten
 */
function get_image_data($img_id) {
    if (!is_numeric($img_id)) {
        log_message('[' . $func_name . '] ' . ERROR_NOT_NUMERIC . $img_id);
        $img_id = 0;
    }
    $img_type = get_image_type($img_id);
    if ($img_type != false) {
        $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
        if (mysqli_connect_errno()) {
            log_error('[' . $func_name . '] ' . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
        }
        $sql = "SELECT *
                FROM `images` 
                WHERE `img_id` = '" . $img_id . "'
                LIMIT 1";
        $result = $db->query($sql);
        unset($sql);
        if (!$result) {
            log_error('[' . $func_name . '] ' . ERROR_DB_QUERY . $db->error);
        }
        $row = $result->fetch_assoc();
        return $row["img_data"];
    } else {
        return false;
    }
    return false;
}

/**
 * Bild URL ausgeben
 *
 * Die Funktion sucht ein Bild-Adresse zu einer übergebenen ID. Ist das 
 * Bild in der Datenbank vorhanden jedoch noch nicht im Cache wird es 
 * angelegt.
 * Ist das Bild nicht in der Datenbank vorhanden, wird die Adresse zur
 * IMAGE_NA Grafik zurück gegeben.
 *
 * @param   int     $img_id   Bild ID
 * @return  string            Relative Adresse des Bildes
 */
function get_image($img_id) {
    
        $func_name = 'get_image()';
    log_message('[' . $func_name . ']' . LOG_PING);
    
    if (!is_numeric($img_id)) {
        log_message('[' . $func_name . '] ' . '$img_id ' . ERROR_NOT_NUMERIC . $img_id);
        $img_id = 0;
    }

    //if ($img_id > 0) {
    $img_type = get_image_type($img_id);
    if ($img_type != false) {
        $image_tempname = IMAGE_CACHEDIR . "image_" . $img_id . "." . $img_type;

        if (file_exists($image_tempname)) {
            return $image_tempname;
        } else {
            $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
            if (mysqli_connect_errno()) {
                log_error('[' . $func_name . '] ' . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
            }
            // Query absetzen
            $sql = "SELECT *
                    FROM `images` 
                    WHERE `img_id` = '" . $img_id . "'
                    LIMIT 1";
            $result = $db->query($sql);
            unset($sql);

            if (!$result) {
                log_error('[' . $func_name . '] ' . ERROR_DB_QUERY . $db->error);
            }

            //		$return = array();
            $row = $result->fetch_assoc();
            //var_dump($row);
            $handle = fopen($image_tempname, "w");
            fwrite($handle, $row["img_data"]);

            //		if (DEBUG_ENABLED) var_dump($return);
            unset($result);
            //		return $return;
            return $image_tempname;
        }
    }
        log_message('[' . $func_name . '] ' . ERROR_IMAGE_URL . $img_id);
        return get_image(IMAGE_NA_ID);

}

/**
 * Bild Typ ausgeben
 *
 * Die Funktion sucht den Bildtyp zu einer ID aus der Datenbank. Wird 
 * kein Typ gefunden wird false zurück gegeben.
 *
 * @param int $image_id		Bild ID
 * @return string|bool  	Bildtyp oder False
 */
function get_image_type($img_id) {
    $func_name = "get_image_type";
    if (!is_numeric($img_id)) {
        log_message('[' . $func_name . '] ' . '$img_id' . ERROR_NOT_NUMERIC . $img_id);
        $img_id = 0;
    }
  

    $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
    if (mysqli_connect_errno()) {
        log_error('[' . $func_name . '] ' . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
    }
    // Query absetzen
    $sql = "SELECT `img_type`
				FROM `images` 
				WHERE `img_id` = '" . $img_id . "'
				LIMIT 1";
    $result = $db->query($sql);
    unset($sql);

    if (!$result) {
        log_error('[' . $func_name . '] ' . ERROR_DB_QUERY . $db->error);
    }

    $db_result = $result->fetch_assoc();
    if (($db_result == NULL) || ($db_result['img_type'] == "")) {
        log_message('[' . $func_name . '] ' . ERROR_IMAGE_TYPE . $img_id);
        return false;
    } else {
        $img_type = explode('/', $db_result['img_type']);
        return $img_type[1];
    }
    /* } else {
      log_message('['.$func_name.'] ' . ERROR_IMAGE_TYPE . $img_id);
      return false;
      } */
}

?>
